---
title: 事务处理
description: transaction是进行一次处理的基本单元，要么全部执行，要么都不执行。
---
事务保证了一次处理的完整性，也保证了数据库中的数据的一致性。

如果我们在增删改的时候某一个环节出了错，它允许我们回滚还原。

事务非常适合应用在安全性搞的场景里，比如金融行业等。
## 事务的特性 ACID
1. A, Atomicity。
2. C，Consistency。一致性指的是数据库在进行事务操作后，会由原来的一致状态，变成另外一种一致的状态。
3. I,Isolation。每个事务之间都是彼此独立的，不会受到其它事务的执行影响。
4. D,Durability,事务提交之后对数据的修改是持久性的。




## 事务的控制
在MySQL 中， InnoDB 是支持事务的，而 MyISAM 存储引擎不支持事务。
事务常用的控制语句如下：
1. STAET TRANSACTION 或者 BEGIN，作用是显式开启一个事务。
2. COMMIT: 提交事务。当提交事务后，对数据库的修改是永久的。
3. ROLLBACK：事务回滚
4. SET TRANSACTION, 设置事务的隔离级别




## 事务的隔离级别
隔离性可以防止数据库在并发处理时出现数据不一致的情况。最严格的情况下，可以采用串行化的方式来处理每一个事务，这就意味着事务之间是互相独立的，不存在并发的情况。但串行化的方法无法满足数据库高并发访问的需求，所以需要降低数据库的隔离标准，来换取事务之间的并发能力。

### 事务并发处理可能存在的异常
事务并发处理时会存在三种异常情况，这些异常情况分别为脏读（Dirty Read）、不可重复读（No Repeatable Read） 和幻读（Phantom Read）。

1. 脏读： 读到了其它事务未提交的数据。
2. 不可重复读：对某数据继续进行读取，发现两次读取的结果不同，也就是说没有读取到相同的内容。这是因为有其他事务对这个数据同时进行了修改和删除。
3. 幻读： 事务 A 根据条件得到了 N 条数据，但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据，这样当事务 A 再次查询的时候发现会有 N + M 条数据，产生了幻读。

### 事务隔离级别

按解决异常从少到多的顺序（如读未提交）

